/**
 * 获取最新版本
 * 获取、设置网站信息、导航信息
 * 
 */

 import config from '../config/index.js'
 import menuController from './menu.js'
 
 let verInfo = null
 
 /**
  * 项目相关的操作
  * * 获取最新版本，by axios
  * * 获取项目信息，by axios
  * * 获取项目信息，by indexedDB
  * * 保存项目信息，to indexedDB
  */
 export default function projectController () {
   
   // 获取最新版本，包括导航信息 by axios
   // 必须有 ver.json 文件，没有会出错。
   const loadNewVer = async () => {
     if  (verInfo) return verInfo
     const rnd = new Date().valueOf() // 获取最新文件
     const url = `${config.baseUrl}docs/.nfpress/ver.json?ver=${rnd}`
     const ver = await config.axios.get(url)
     // console.log('版本信息：', ver.data)
     verInfo = ver.data
     return verInfo
   }
 
   // 获取项目信息，包括导航信息 by axios
   // 必须有 project.json 文件，没有会出错。
   const loadProject = async (ver = 1) => {
     const url = `${config.baseUrl}docs/.nfpress/project.json?ver=${ver}`
     const projectInfo = await config.axios.get(url)
     // console.log('项目信息：', projectInfo.data)
     return projectInfo.data
   }
   
   // 从 indexedDB 里面加载 项目信息，
   // 如果有，判断版本
   // 如果没有，则用 axios 加载 
   const getProject = async () => {
     // 获取 indexedDB 里面的 【项目信息】的仓库对象
     const { project: dbProject } = config.help.stores()
 
     // 从 indexedDB 获取 项目信息
     const projectInfo = await dbProject.get()
     if (projectInfo.length > 0) {
       // indexedDB 里面有项目信息，判断是否最新版本
       const { ver } = await loadNewVer()
       if (ver == projectInfo[0].ver) {
         return projectInfo[0]
       } else {
         // 版本不同，获取新版本的项目信息
         const newProjectInfo = await loadProject(ver)
         // 设置版本号
         newProjectInfo.ver = ver
         // 保存
         dbProject.put(newProjectInfo)
         return newProjectInfo
       }
     } else {
       // 没有信息，用 axios 加载，没有处理找不到文件的情况。
       const projectInfo = await loadProject()
       // 添加
       dbProject.add(projectInfo)
       return projectInfo
     }
   }
 
   // 保存项目
   const saveProject = async (projectInfo) => {
     // 获取 indexedDB 里面的 【项目信息】的仓库对象
     const { project: dbProject } = config.help.stores()
 
     // 保存
     const res = await dbProject.save(projectInfo)
     return res
   }
 
   /**
    * 初始化设置
    */
   const docInit = async (state) => {
     // 获取网站信息和导航信息
     const projectInfo = await getProject()
     
     // 设置版本
     state.current.ver = projectInfo.ver
 
     // 设置网站信息
     state.projectInfo = {
       ver: projectInfo.ver, // 版本信息
       title: projectInfo.title,
       description: projectInfo.description
     }
     // 设置导航信息
     state.naviList.length = 0
     state.naviList.push(...projectInfo.navi)
 
     // 获取菜单信息
     const { getMenu } = menuController()
     const menuList = await getMenu(projectInfo.ver)
     // 设置菜单信息
     state.menuList.length = 0
     state.menuList.push(...menuList)
 
     // 设置默认导航项
     for (let i = 0; i < projectInfo.navi.length; i++) {
       const nn = projectInfo.navi[i]
       if (nn.link === 'menu') {
         state.current.naviId = nn.naviId
         break
       }
     }
 
     return projectInfo
 
   }
   
   return {
     loadNewVer, // 获取版本号和数据库名称
     docInit, // 初始化
     loadProject, // 好像不需要导出去
     getProject, // 获取项目信息
     saveProject // 保存项目信息到 indexedDB
   }
 
 }
 